import axios from "axios";
import { Message } from "element-ui";
import Vue from "vue";

// 问卷Python后端服务配置
const questionService = axios.create({
    baseURL: 'http://47.110.63.8:35000/',
    timeout: 30000,
    withCredentials: false
});

// 请求拦截器
questionService.interceptors.request.use(
    config => {
        const token = localStorage.getItem('token');
        if (token) {
            config.headers.Authorization = `Bearer ${token}`;
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

// 响应拦截器
questionService.interceptors.response.use(
    res => res.data,
    error => {
        if (error.response) {
            Message.error(error.response.data.message || error.response.data.error || '请求失败');
        } else {
            Message.error('网络错误，请检查问卷服务是否启动');
        }
        return Promise.reject(error);
    }
);

const api = {
    /**
     * 1. 上传原始数据
     * @param {File} file - 原始csv文件
     * @param {number|string} index - 队伍编号
     * @returns {Promise}
     */
    uploadRawData: (file, index) => {
        const formData = new FormData();
        formData.append('rawFile', file);
        formData.append('index', index);
        return questionService.post('/inputData', formData, {
            headers: { 'Content-Type': 'multipart/form-data' }
        });
    },

    /**
     * 2. 上传模型和特征文件
     * @param {File} features - 特征文件（.joblib）
     * @param {File} model - 模型文件（.joblib）
     * @param {string} date - 日期（如20250711）
     * @returns {Promise}
     */
    uploadModels: (features, model, date) => {
        const formData = new FormData();
        formData.append('features', features);
        formData.append('model', model);
        formData.append('date', date);
        return questionService.post('/inputModels', formData, {
            headers: { 'Content-Type': 'multipart/form-data' }
        });
    },

    /**
     * 3. 查询原始数据目录结构
     * @returns {Promise}
     */
    checkData: () => {
        return questionService.get('/checkData');
    },

    /**
     * 4. 查询模型目录结构
     * @returns {Promise}
     */
    checkModels: () => {
        return questionService.get('/checkModels');
    },

    /**
     * 5. 查询模型目录结构
     * @returns {Promise}
     */
    checkResult: () => {
        return questionService.get('/checkResult');
    },

    /**
     * 5. 分析接口
     * @param {string} model - 模型日期（如20250711）
     * @param {number|string} rawData - 队伍编号
     * @returns {Promise}
     */
    analyse: (model, rawData) => {
        return questionService.post('/analyse', { model, rawData });
    },

    /**
     * 6. 查看分析结果
     * @param {string} model - 模型日期
     * @param {number|string} rawData - 队伍编号
     * @returns {Promise}
     */
    viewResult: (model, rawData) => {
        return questionService.post('/view', { model, rawData }, { responseType: 'blob' });
    },

    /**
     * 7. 测试接口
     * @returns {Promise}
     */
    test: () => {
        return questionService.get('/test');
    }
};

Vue.prototype.$questionPythonApi = api;

export default api;